package cultu.supplier.service;

import org.granite.messaging.service.annotations.RemoteDestination;

import cultu.core.message.Context;
import cultu.supplier.message.Annotation;
import cultu.supplier.message.AnnotationCriteria;
import cultu.supplier.message.AnnotationList;
import cultu.supplier.message.AnnotationScenario;

/**
 * The Interface AnnotationManager.
 */
@RemoteDestination(id="annotationManager",channel="my-amf")
public interface AnnotationManager
{
  
  /**
   * Gets the annotation.
   *
   * @param pContext the context
   * @param pScenario the scenario
   * @param pAnnotation the annotation
   * @return the annotation
   */
  Annotation getAnnotation(Context pContext, AnnotationScenario pScenario, Annotation pAnnotation);

  /**
   * Creates the annotation.
   *
   * @param pContext the context
   * @param pScenario the scenario
   * @param pAnnotation the annotation
   * @return the annotation
   */
  Annotation createAnnotation(Context pContext, AnnotationScenario pScenario, Annotation pAnnotation);

  /**
   * Delete annotation.
   *
   * @param pContext the context
   * @param pScenario the scenario
   * @param pAnnotation the annotation
   * @return the annotation
   */
  Annotation deleteAnnotation(Context pContext, AnnotationScenario pScenario, Annotation pAnnotation);
 
  /**
   * Update annotation.
   *
   * @param pContext the context
   * @param pScenario the scenario
   * @param pAnnotation the annotation
   * @return the annotation
   */
  Annotation updateAnnotation(Context pContext, AnnotationScenario pScenario, Annotation pAnnotation);

  /**
   * Find annotations.
   *
   * @param pContext the context
   * @param pScenario the scenario
   * @param pCriteria the criteria
   * @return the annotation list
   */
  AnnotationList findAnnotations(Context pContext, AnnotationScenario pScenario, AnnotationCriteria pCriteria);

  /**
   * Delete annotations.
   *
   * @param pContext the context
   * @param pScenario the scenario
   * @param pList the list
   * @return the annotation list
   */
  AnnotationList deleteAnnotations(Context pContext, AnnotationScenario pScenario, AnnotationList pList);

  /**
   * Creates the annotations.
   *
   * @param pContext the context
   * @param pScenario the scenario
   * @param pList the list
   * @return the annotation list
   */
  AnnotationList createAnnotations(Context pContext, AnnotationScenario pScenario, AnnotationList pList);

  /**
   * Update annotations.
   *
   * @param pContext the context
   * @param pScenario the scenario
   * @param pList the list
   * @return the annotation list
   */
  AnnotationList updateAnnotations(Context pContext, AnnotationScenario pScenario, AnnotationList pList);
}
